package network.step4;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/*
 * 연결된 클라이언트와 I/O작업을 처리하는 Thread로 만들 거임
 * (클라이언트로 부터 입력 -> 화면에 출력/클라이언트로 출력 : 클라이언트가 EOF 전송시까지 반복)
 * 
 * ServerThread에서 생성된 Thread하나는 하나의 클라이언트와 I/O 작업.
 */
public class ServerThread implements Runnable {
	private Socket socket;
	//매우 중요한 부분. 생성자에 소켓을 받는다.
	public ServerThread(Socket socket){
		this.socket = socket;
	}
	
	public void run (){
		//연결준비
		BufferedReader br = null;//클라이언트와 연결된 Input
		PrintWriter out = null;//클아이언트와 연결된 output
		
		
		// I/O작업
		//1. 연결
			try{
				br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				out = new PrintWriter(socket.getOutputStream(), true);
//				2. 입출력
				String str = br.readLine();
				while(str != null){
					out.println(str);
					System.out.println(str);
					str = br.readLine();
				}
				
			}catch(IOException e){
				e.printStackTrace();
			}finally{
				if(br != null)
					try {
						br.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				if(out != null)out.close();
				//PrintWriter는 익셉션을 던지지 않는다.
				
				if(socket != null)
					try {
						socket.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}				
		}
		
}